package com.company.config;

import com.company.bean.Color;
import com.company.bean.ColorFactoryBean;
import com.company.bean.Person;
import com.company.bean.Red;
import com.company.condition.LinuxCondition;
import com.company.condition.MyImportBeanDefinitions;
import com.company.condition.MyImportSelector;
import com.company.condition.WindowCondition;
import org.springframework.context.annotation.*;

@Configuration
@Import({Color.class, Red.class, MyImportSelector.class, MyImportBeanDefinitions.class})//导入组件，id默认是组件的全类名
public class MainConfig2 {
    @Bean("person")
    @Scope("prototype")
    /*
    prototype多实例  ioc启动并不会创建对象放在容器中，而是在每次获取中才调用方法获取
    singleton单实例 ioc启动会调用方法创建对象放到容器中
    request 同一个请求创建一个实例
    session 同一个session创建一个实例


    懒加载
       容器启动不创建对象，第一次获取的时候创建对象，并初始化


       如果系统是window就注册bill
     */
    public Person person() {
        return new Person("zhangsan", 18);
    }

    @Conditional({WindowCondition.class})//按照一定条件判断是否给容器添加对象，也可以放在类上，统一设置
    @Bean("bill")
    public Person person1() {
        return new Person("bill", 62);
    }

    @Conditional({LinuxCondition.class})
    @Bean("linus")
    public Person person02() {
        return new Person("linus", 40);
    }

    @Bean
    public ColorFactoryBean colorFactoryBean() {
        return new ColorFactoryBean();
    }
}
